# ### 第一题
# 请编写一个Python函数`calculate_statistics`，该函数接收一个整数列表作为输入，并返回一个包含三个元素的元组：列表的平均值、中位数和众数。如果列表为空，则所有返回值应为`None`。如果有多个众数，只需返回其中一个即可。
#
# 请注意，你需要手动实现计算平均值、中位数和众数的逻辑，不要使用任何外部库。
#
# **示例输入输出如下：**
#
# 输入: `[1, 2, 3, 4, 4]`
# 输出: `(2.8, 3, 4)`
#
# 输入: `[]`
# 输出: `(None, None, None)`
#
# 输入: `[7, 7, 7, 7]`
# 输出: `(7, 7, 7)`
#
# **提示：**
# - 平均值是所有数值加总后除以数值的数量。
# - 中位数是将数值排序后位于中间的数值。如果数值的数量是偶数，则中位数是中间两个数值的平均值。
# - 众数是列表中出现次数最多的数值。
#### 答案
def calculate_statistics(arr):
    sz = len(arr)
    if sz==0:
        return (None,None,None)
    else:
        avg=sum(arr)/sz
        nums=sorted(arr)
        if sz%2==0:
           median=(nums[sz//2]+nums[sz//2-1])/2
        else:
            median=nums[sz//2]
        Min=nums[0]
        Max=nums[sz-1]
        counts = [0]*(Max-Min+1)
        for num in arr:
            counts[num-Min]+=1
        Max_index=max(counts)
        mode=[]
        index=0
        for count in counts:
            if count==Max_index:
                mode.append(index+Min)
            index+=1
        return (avg,median,mode)
arr=[1,1,1,2,2,2,5,5,3]
print(calculate_statistics(arr))








#answer


# def calculate_statistics(nums):
#     if not nums:
#         return (None, None, None)
#
#     # 计算平均值
#     avg = sum(nums) / len(nums)
#
#     # 计算中位数
#     nums_sorted = sorted(nums)
#     n = len(nums)
#     if n % 2 == 0:
#         median = (nums_sorted[n // 2 - 1] + nums_sorted[n // 2]) / 2
#     else:
#         median = nums_sorted[n // 2]
#
#     # 计算众数
#     counts = {}
#     for num in nums:
#         if num in counts:
#             counts[num] += 1
#         else:
#             counts[num] = 1
#     mode = max(counts, key=counts.get)
#
#     return (avg, median, mode)
#
#
# ```








